// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Google Cloud Deployment Manager API Version v2
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://cloud.google.com/deployment-manager/'>Google Cloud Deployment Manager API</a>
 *      <tr><th>API Version<td>v2
 *      <tr><th>API Rev<td>20170315 (804)
 *      <tr><th>API Docs
 *          <td><a href='https://cloud.google.com/deployment-manager/'>
 *              https://cloud.google.com/deployment-manager/</a>
 *      <tr><th>Discovery Name<td>deploymentmanager
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Google Cloud Deployment Manager API can be found at
 * <a href='https://cloud.google.com/deployment-manager/'>https://cloud.google.com/deployment-manager/</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.DeploymentManager.v2
{
    /// <summary>The DeploymentManager Service.</summary>
    public class DeploymentManagerService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v2";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public DeploymentManagerService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public DeploymentManagerService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            deployments = new DeploymentsResource(this);
            manifests = new ManifestsResource(this);
            operations = new OperationsResource(this);
            resources = new ResourcesResource(this);
            types = new TypesResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "deploymentmanager"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://www.googleapis.com/deploymentmanager/v2/projects/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return "deploymentmanager/v2/projects/"; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Google Cloud Deployment Manager API.</summary>
        public class Scope
        {
            /// <summary>View and manage your data across Google Cloud Platform services</summary>
            public static string CloudPlatform = "https://www.googleapis.com/auth/cloud-platform";

            /// <summary>View your data across Google Cloud Platform services</summary>
            public static string CloudPlatformReadOnly = "https://www.googleapis.com/auth/cloud-platform.read-only";

            /// <summary>View and manage your Google Cloud Platform management resources and deployment status
            /// information</summary>
            public static string NdevCloudman = "https://www.googleapis.com/auth/ndev.cloudman";

            /// <summary>View your Google Cloud Platform management resources and deployment status
            /// information</summary>
            public static string NdevCloudmanReadonly = "https://www.googleapis.com/auth/ndev.cloudman.readonly";

        }



        private readonly DeploymentsResource deployments;

        /// <summary>Gets the Deployments resource.</summary>
        public virtual DeploymentsResource Deployments
        {
            get { return deployments; }
        }

        private readonly ManifestsResource manifests;

        /// <summary>Gets the Manifests resource.</summary>
        public virtual ManifestsResource Manifests
        {
            get { return manifests; }
        }

        private readonly OperationsResource operations;

        /// <summary>Gets the Operations resource.</summary>
        public virtual OperationsResource Operations
        {
            get { return operations; }
        }

        private readonly ResourcesResource resources;

        /// <summary>Gets the Resources resource.</summary>
        public virtual ResourcesResource Resources
        {
            get { return resources; }
        }

        private readonly TypesResource types;

        /// <summary>Gets the Types resource.</summary>
        public virtual TypesResource Types
        {
            get { return types; }
        }
    }

    ///<summary>A base abstract class for DeploymentManager requests.</summary>
    public abstract class DeploymentManagerBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new DeploymentManagerBaseServiceRequest instance.</summary>
        protected DeploymentManagerBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>Data format for the response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for the response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
        }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>IP address of the site where the request originates. Use this if you want to enforce per-user
        /// limits.</summary>
        [Google.Apis.Util.RequestParameterAttribute("userIp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UserIp { get; set; }

        /// <summary>Initializes DeploymentManager parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "userIp", new Google.Apis.Discovery.Parameter
                {
                    Name = "userIp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "deployments" collection of methods.</summary>
    public class DeploymentsResource
    {
        private const string Resource = "deployments";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public DeploymentsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Cancels and removes the preview currently associated with the deployment.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">The project ID for this request.</param>
        /// <param name="deployment">The name of the
        /// deployment for this request.</param>
        public virtual CancelPreviewRequest CancelPreview(Google.Apis.DeploymentManager.v2.Data.DeploymentsCancelPreviewRequest body, string project, string deployment)
        {
            return new CancelPreviewRequest(service, body, project, deployment);
        }

        /// <summary>Cancels and removes the preview currently associated with the deployment.</summary>
        public class CancelPreviewRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.Operation>
        {
            /// <summary>Constructs a new CancelPreview request.</summary>
            public CancelPreviewRequest(Google.Apis.Services.IClientService service, Google.Apis.DeploymentManager.v2.Data.DeploymentsCancelPreviewRequest body, string project, string deployment)
                : base(service)
            {
                Project = project;
                Deployment = deployment;
                Body = body;
                InitParameters();
            }


            /// <summary>The project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the deployment for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("deployment", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Deployment { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.DeploymentManager.v2.Data.DeploymentsCancelPreviewRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "cancelPreview"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/deployments/{deployment}/cancelPreview"; }
            }

            /// <summary>Initializes CancelPreview parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "deployment", new Google.Apis.Discovery.Parameter
                    {
                        Name = "deployment",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
            }

        }

        /// <summary>Deletes a deployment and all of the resources in the deployment.</summary>
        /// <param name="project">The project ID for this request.</param>
        /// <param name="deployment">The name of the
        /// deployment for this request.</param>
        public virtual DeleteRequest Delete(string project, string deployment)
        {
            return new DeleteRequest(service, project, deployment);
        }

        /// <summary>Deletes a deployment and all of the resources in the deployment.</summary>
        public class DeleteRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.Operation>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string project, string deployment)
                : base(service)
            {
                Project = project;
                Deployment = deployment;
                InitParameters();
            }


            /// <summary>The project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the deployment for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("deployment", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Deployment { get; private set; }

            /// <summary>Sets the policy to use for deleting resources.</summary>
            /// [default: DELETE]
            [Google.Apis.Util.RequestParameterAttribute("deletePolicy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<DeletePolicyEnum> DeletePolicy { get; set; }

            /// <summary>Sets the policy to use for deleting resources.</summary>
            public enum DeletePolicyEnum
            {
                [Google.Apis.Util.StringValueAttribute("ABANDON")]
                ABANDON,
                [Google.Apis.Util.StringValueAttribute("DELETE")]
                DELETE,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/deployments/{deployment}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "deployment", new Google.Apis.Discovery.Parameter
                    {
                        Name = "deployment",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "deletePolicy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "deletePolicy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "DELETE",
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets information about a specific deployment.</summary>
        /// <param name="project">The project ID for this request.</param>
        /// <param name="deployment">The name of the
        /// deployment for this request.</param>
        public virtual GetRequest Get(string project, string deployment)
        {
            return new GetRequest(service, project, deployment);
        }

        /// <summary>Gets information about a specific deployment.</summary>
        public class GetRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.Deployment>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string project, string deployment)
                : base(service)
            {
                Project = project;
                Deployment = deployment;
                InitParameters();
            }


            /// <summary>The project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the deployment for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("deployment", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Deployment { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/deployments/{deployment}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "deployment", new Google.Apis.Discovery.Parameter
                    {
                        Name = "deployment",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
            }

        }

        /// <summary>Gets the access control policy for a resource. May be empty if no such policy or resource
        /// exists.</summary>
        /// <param name="project">Project ID for this request.</param>
        /// <param name="resource">Name of the resource for
        /// this request.</param>
        public virtual GetIamPolicyRequest GetIamPolicy(string project, string resource)
        {
            return new GetIamPolicyRequest(service, project, resource);
        }

        /// <summary>Gets the access control policy for a resource. May be empty if no such policy or resource
        /// exists.</summary>
        public class GetIamPolicyRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.Policy>
        {
            /// <summary>Constructs a new GetIamPolicy request.</summary>
            public GetIamPolicyRequest(Google.Apis.Services.IClientService service, string project, string resource)
                : base(service)
            {
                Project = project;
                Resource = resource;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the resource for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Resource { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "getIamPolicy"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/deployments/{resource}/getIamPolicy"; }
            }

            /// <summary>Initializes GetIamPolicy parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "resource", new Google.Apis.Discovery.Parameter
                    {
                        Name = "resource",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9_]{0,61}[a-z0-9])?",
                    });
            }

        }

        /// <summary>Creates a deployment and all of the resources described by the deployment manifest.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">The project ID for this request.</param>
        public virtual InsertRequest Insert(Google.Apis.DeploymentManager.v2.Data.Deployment body, string project)
        {
            return new InsertRequest(service, body, project);
        }

        /// <summary>Creates a deployment and all of the resources described by the deployment manifest.</summary>
        public class InsertRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.Operation>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.DeploymentManager.v2.Data.Deployment body, string project)
                : base(service)
            {
                Project = project;
                Body = body;
                InitParameters();
            }


            /// <summary>The project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>If set to true, creates a deployment and creates "shell" resources but does not actually
            /// instantiate these resources. This allows you to preview what your deployment looks like. After
            /// previewing a deployment, you can deploy your resources by making a request with the update() method or
            /// you can use the cancelPreview() method to cancel the preview altogether. Note that the deployment will
            /// still exist after you cancel the preview and you must separately delete this deployment if you want to
            /// remove it.</summary>
            [Google.Apis.Util.RequestParameterAttribute("preview", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> Preview { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.DeploymentManager.v2.Data.Deployment Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "insert"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/deployments"; }
            }

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "preview", new Google.Apis.Discovery.Parameter
                    {
                        Name = "preview",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Lists all deployments for a given project.</summary>
        /// <param name="project">The project ID for this request.</param>
        public virtual ListRequest List(string project)
        {
            return new ListRequest(service, project);
        }

        /// <summary>Lists all deployments for a given project.</summary>
        public class ListRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.DeploymentsListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string project)
                : base(service)
            {
                Project = project;
                InitParameters();
            }


            /// <summary>The project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Sets a filter expression for filtering listed resources, in the form filter={expression}. Your
            /// {expression} must be in the format: field_name comparison_string literal_string.
            ///
            /// The field_name is the name of the field you want to compare. Only atomic field types are supported
            /// (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The
            /// literal_string is the string value to filter to. The literal value must be valid for the type of field
            /// you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a
            /// regular expression using RE2 syntax. The literal value must match the entire field.
            ///
            /// For example, to filter for instances that do not have a name of example-instance, you would use
            /// filter=name ne example-instance.
            ///
            /// You can filter on nested fields. For example, you could filter on instances that have set the
            /// scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to
            /// organize and search for results based on label values.
            ///
            /// To filter on multiple expressions, provide each separate expression within parentheses. For example,
            /// (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND
            /// expressions, meaning that resources must match all expressions to pass the filters.</summary>
            [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filter { get; set; }

            /// <summary>The maximum number of results per page that should be returned. If the number of available
            /// results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the
            /// next page of results in subsequent list requests. Acceptable values are 0 to 500, inclusive. (Default:
            /// 500)</summary>
            /// [default: 500]
            /// [minimum: 0]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Sorts list results by a certain order. By default, results are returned in alphanumerical order
            /// based on the resource name.
            ///
            /// You can also sort results in descending order based on the creation timestamp using
            /// orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse
            /// chronological order (newest result first). Use this to sort resources like operations so that the newest
            /// operation is returned first.
            ///
            /// Currently, only sorting by name or creationTimestamp desc is supported.</summary>
            [Google.Apis.Util.RequestParameterAttribute("orderBy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string OrderBy { get; set; }

            /// <summary>Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list
            /// request to get the next page of results.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/deployments"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "filter", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filter",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "500",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "orderBy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "orderBy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Updates a deployment and all of the resources described by the deployment manifest. This method
        /// supports patch semantics.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">The project ID for this request.</param>
        /// <param name="deployment">The name of the
        /// deployment for this request.</param>
        public virtual PatchRequest Patch(Google.Apis.DeploymentManager.v2.Data.Deployment body, string project, string deployment)
        {
            return new PatchRequest(service, body, project, deployment);
        }

        /// <summary>Updates a deployment and all of the resources described by the deployment manifest. This method
        /// supports patch semantics.</summary>
        public class PatchRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.Operation>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.DeploymentManager.v2.Data.Deployment body, string project, string deployment)
                : base(service)
            {
                Project = project;
                Deployment = deployment;
                Body = body;
                InitParameters();
            }


            /// <summary>The project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the deployment for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("deployment", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Deployment { get; private set; }

            /// <summary>Sets the policy to use for creating new resources.</summary>
            /// [default: CREATE_OR_ACQUIRE]
            [Google.Apis.Util.RequestParameterAttribute("createPolicy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<CreatePolicyEnum> CreatePolicy { get; set; }

            /// <summary>Sets the policy to use for creating new resources.</summary>
            public enum CreatePolicyEnum
            {
                [Google.Apis.Util.StringValueAttribute("ACQUIRE")]
                ACQUIRE,
                [Google.Apis.Util.StringValueAttribute("CREATE_OR_ACQUIRE")]
                CREATEORACQUIRE,
            }

            /// <summary>Sets the policy to use for deleting resources.</summary>
            /// [default: DELETE]
            [Google.Apis.Util.RequestParameterAttribute("deletePolicy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<DeletePolicyEnum> DeletePolicy { get; set; }

            /// <summary>Sets the policy to use for deleting resources.</summary>
            public enum DeletePolicyEnum
            {
                [Google.Apis.Util.StringValueAttribute("ABANDON")]
                ABANDON,
                [Google.Apis.Util.StringValueAttribute("DELETE")]
                DELETE,
            }

            /// <summary>If set to true, updates the deployment and creates and updates the "shell" resources but does
            /// not actually alter or instantiate these resources. This allows you to preview what your deployment will
            /// look like. You can use this intent to preview how an update would affect your deployment. You must
            /// provide a target.config with a configuration if this is set to true. After previewing a deployment, you
            /// can deploy your resources by making a request with the update() or you can cancelPreview() to remove the
            /// preview altogether. Note that the deployment will still exist after you cancel the preview and you must
            /// separately delete this deployment if you want to remove it.</summary>
            /// [default: false]
            [Google.Apis.Util.RequestParameterAttribute("preview", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> Preview { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.DeploymentManager.v2.Data.Deployment Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/deployments/{deployment}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "deployment", new Google.Apis.Discovery.Parameter
                    {
                        Name = "deployment",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "createPolicy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "createPolicy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "CREATE_OR_ACQUIRE",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "deletePolicy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "deletePolicy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "DELETE",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "preview", new Google.Apis.Discovery.Parameter
                    {
                        Name = "preview",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "false",
                        Pattern = null,
                    });
            }

        }

        /// <summary>Sets the access control policy on the specified resource. Replaces any existing policy.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">Project ID for this request.</param>
        /// <param name="resource">Name of the resource for
        /// this request.</param>
        public virtual SetIamPolicyRequest SetIamPolicy(Google.Apis.DeploymentManager.v2.Data.Policy body, string project, string resource)
        {
            return new SetIamPolicyRequest(service, body, project, resource);
        }

        /// <summary>Sets the access control policy on the specified resource. Replaces any existing policy.</summary>
        public class SetIamPolicyRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.Policy>
        {
            /// <summary>Constructs a new SetIamPolicy request.</summary>
            public SetIamPolicyRequest(Google.Apis.Services.IClientService service, Google.Apis.DeploymentManager.v2.Data.Policy body, string project, string resource)
                : base(service)
            {
                Project = project;
                Resource = resource;
                Body = body;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the resource for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Resource { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.DeploymentManager.v2.Data.Policy Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "setIamPolicy"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/deployments/{resource}/setIamPolicy"; }
            }

            /// <summary>Initializes SetIamPolicy parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "resource", new Google.Apis.Discovery.Parameter
                    {
                        Name = "resource",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9_]{0,61}[a-z0-9])?",
                    });
            }

        }

        /// <summary>Stops an ongoing operation. This does not roll back any work that has already been completed, but
        /// prevents any new work from being started.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">The project ID for this request.</param>
        /// <param name="deployment">The name of the
        /// deployment for this request.</param>
        public virtual StopRequest Stop(Google.Apis.DeploymentManager.v2.Data.DeploymentsStopRequest body, string project, string deployment)
        {
            return new StopRequest(service, body, project, deployment);
        }

        /// <summary>Stops an ongoing operation. This does not roll back any work that has already been completed, but
        /// prevents any new work from being started.</summary>
        public class StopRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.Operation>
        {
            /// <summary>Constructs a new Stop request.</summary>
            public StopRequest(Google.Apis.Services.IClientService service, Google.Apis.DeploymentManager.v2.Data.DeploymentsStopRequest body, string project, string deployment)
                : base(service)
            {
                Project = project;
                Deployment = deployment;
                Body = body;
                InitParameters();
            }


            /// <summary>The project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the deployment for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("deployment", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Deployment { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.DeploymentManager.v2.Data.DeploymentsStopRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "stop"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/deployments/{deployment}/stop"; }
            }

            /// <summary>Initializes Stop parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "deployment", new Google.Apis.Discovery.Parameter
                    {
                        Name = "deployment",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
            }

        }

        /// <summary>Returns permissions that a caller has on the specified resource.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">Project ID for this request.</param>
        /// <param name="resource">Name of the resource for
        /// this request.</param>
        public virtual TestIamPermissionsRequest TestIamPermissions(Google.Apis.DeploymentManager.v2.Data.TestPermissionsRequest body, string project, string resource)
        {
            return new TestIamPermissionsRequest(service, body, project, resource);
        }

        /// <summary>Returns permissions that a caller has on the specified resource.</summary>
        public class TestIamPermissionsRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.TestPermissionsResponse>
        {
            /// <summary>Constructs a new TestIamPermissions request.</summary>
            public TestIamPermissionsRequest(Google.Apis.Services.IClientService service, Google.Apis.DeploymentManager.v2.Data.TestPermissionsRequest body, string project, string resource)
                : base(service)
            {
                Project = project;
                Resource = resource;
                Body = body;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the resource for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Resource { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.DeploymentManager.v2.Data.TestPermissionsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "testIamPermissions"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/deployments/{resource}/testIamPermissions"; }
            }

            /// <summary>Initializes TestIamPermissions parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "resource", new Google.Apis.Discovery.Parameter
                    {
                        Name = "resource",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9_]{0,61}[a-z0-9])?",
                    });
            }

        }

        /// <summary>Updates a deployment and all of the resources described by the deployment manifest.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">The project ID for this request.</param>
        /// <param name="deployment">The name of the
        /// deployment for this request.</param>
        public virtual UpdateRequest Update(Google.Apis.DeploymentManager.v2.Data.Deployment body, string project, string deployment)
        {
            return new UpdateRequest(service, body, project, deployment);
        }

        /// <summary>Updates a deployment and all of the resources described by the deployment manifest.</summary>
        public class UpdateRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.Operation>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.DeploymentManager.v2.Data.Deployment body, string project, string deployment)
                : base(service)
            {
                Project = project;
                Deployment = deployment;
                Body = body;
                InitParameters();
            }


            /// <summary>The project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the deployment for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("deployment", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Deployment { get; private set; }

            /// <summary>Sets the policy to use for creating new resources.</summary>
            /// [default: CREATE_OR_ACQUIRE]
            [Google.Apis.Util.RequestParameterAttribute("createPolicy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<CreatePolicyEnum> CreatePolicy { get; set; }

            /// <summary>Sets the policy to use for creating new resources.</summary>
            public enum CreatePolicyEnum
            {
                [Google.Apis.Util.StringValueAttribute("ACQUIRE")]
                ACQUIRE,
                [Google.Apis.Util.StringValueAttribute("CREATE_OR_ACQUIRE")]
                CREATEORACQUIRE,
            }

            /// <summary>Sets the policy to use for deleting resources.</summary>
            /// [default: DELETE]
            [Google.Apis.Util.RequestParameterAttribute("deletePolicy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<DeletePolicyEnum> DeletePolicy { get; set; }

            /// <summary>Sets the policy to use for deleting resources.</summary>
            public enum DeletePolicyEnum
            {
                [Google.Apis.Util.StringValueAttribute("ABANDON")]
                ABANDON,
                [Google.Apis.Util.StringValueAttribute("DELETE")]
                DELETE,
            }

            /// <summary>If set to true, updates the deployment and creates and updates the "shell" resources but does
            /// not actually alter or instantiate these resources. This allows you to preview what your deployment will
            /// look like. You can use this intent to preview how an update would affect your deployment. You must
            /// provide a target.config with a configuration if this is set to true. After previewing a deployment, you
            /// can deploy your resources by making a request with the update() or you can cancelPreview() to remove the
            /// preview altogether. Note that the deployment will still exist after you cancel the preview and you must
            /// separately delete this deployment if you want to remove it.</summary>
            /// [default: false]
            [Google.Apis.Util.RequestParameterAttribute("preview", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> Preview { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.DeploymentManager.v2.Data.Deployment Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "update"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PUT"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/deployments/{deployment}"; }
            }

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "deployment", new Google.Apis.Discovery.Parameter
                    {
                        Name = "deployment",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "createPolicy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "createPolicy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "CREATE_OR_ACQUIRE",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "deletePolicy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "deletePolicy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "DELETE",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "preview", new Google.Apis.Discovery.Parameter
                    {
                        Name = "preview",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "false",
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "manifests" collection of methods.</summary>
    public class ManifestsResource
    {
        private const string Resource = "manifests";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ManifestsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Gets information about a specific manifest.</summary>
        /// <param name="project">The project ID for this request.</param>
        /// <param name="deployment">The name of the
        /// deployment for this request.</param>
        /// <param name="manifest">The name of the manifest for this
        /// request.</param>
        public virtual GetRequest Get(string project, string deployment, string manifest)
        {
            return new GetRequest(service, project, deployment, manifest);
        }

        /// <summary>Gets information about a specific manifest.</summary>
        public class GetRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.Manifest>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string project, string deployment, string manifest)
                : base(service)
            {
                Project = project;
                Deployment = deployment;
                Manifest = manifest;
                InitParameters();
            }


            /// <summary>The project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the deployment for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("deployment", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Deployment { get; private set; }

            /// <summary>The name of the manifest for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("manifest", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Manifest { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/deployments/{deployment}/manifests/{manifest}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "deployment", new Google.Apis.Discovery.Parameter
                    {
                        Name = "deployment",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "manifest", new Google.Apis.Discovery.Parameter
                    {
                        Name = "manifest",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
            }

        }

        /// <summary>Lists all manifests for a given deployment.</summary>
        /// <param name="project">The project ID for this request.</param>
        /// <param name="deployment">The name of the
        /// deployment for this request.</param>
        public virtual ListRequest List(string project, string deployment)
        {
            return new ListRequest(service, project, deployment);
        }

        /// <summary>Lists all manifests for a given deployment.</summary>
        public class ListRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.ManifestsListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string project, string deployment)
                : base(service)
            {
                Project = project;
                Deployment = deployment;
                InitParameters();
            }


            /// <summary>The project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the deployment for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("deployment", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Deployment { get; private set; }

            /// <summary>Sets a filter expression for filtering listed resources, in the form filter={expression}. Your
            /// {expression} must be in the format: field_name comparison_string literal_string.
            ///
            /// The field_name is the name of the field you want to compare. Only atomic field types are supported
            /// (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The
            /// literal_string is the string value to filter to. The literal value must be valid for the type of field
            /// you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a
            /// regular expression using RE2 syntax. The literal value must match the entire field.
            ///
            /// For example, to filter for instances that do not have a name of example-instance, you would use
            /// filter=name ne example-instance.
            ///
            /// You can filter on nested fields. For example, you could filter on instances that have set the
            /// scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to
            /// organize and search for results based on label values.
            ///
            /// To filter on multiple expressions, provide each separate expression within parentheses. For example,
            /// (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND
            /// expressions, meaning that resources must match all expressions to pass the filters.</summary>
            [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filter { get; set; }

            /// <summary>The maximum number of results per page that should be returned. If the number of available
            /// results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the
            /// next page of results in subsequent list requests. Acceptable values are 0 to 500, inclusive. (Default:
            /// 500)</summary>
            /// [default: 500]
            /// [minimum: 0]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Sorts list results by a certain order. By default, results are returned in alphanumerical order
            /// based on the resource name.
            ///
            /// You can also sort results in descending order based on the creation timestamp using
            /// orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse
            /// chronological order (newest result first). Use this to sort resources like operations so that the newest
            /// operation is returned first.
            ///
            /// Currently, only sorting by name or creationTimestamp desc is supported.</summary>
            [Google.Apis.Util.RequestParameterAttribute("orderBy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string OrderBy { get; set; }

            /// <summary>Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list
            /// request to get the next page of results.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/deployments/{deployment}/manifests"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "deployment", new Google.Apis.Discovery.Parameter
                    {
                        Name = "deployment",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "filter", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filter",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "500",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "orderBy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "orderBy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "operations" collection of methods.</summary>
    public class OperationsResource
    {
        private const string Resource = "operations";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public OperationsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Gets information about a specific operation.</summary>
        /// <param name="project">The project ID for this request.</param>
        /// <param name="operation">The name of the
        /// operation for this request.</param>
        public virtual GetRequest Get(string project, string operation)
        {
            return new GetRequest(service, project, operation);
        }

        /// <summary>Gets information about a specific operation.</summary>
        public class GetRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.Operation>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string project, string operation)
                : base(service)
            {
                Project = project;
                Operation = operation;
                InitParameters();
            }


            /// <summary>The project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the operation for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("operation", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Operation { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/operations/{operation}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "operation", new Google.Apis.Discovery.Parameter
                    {
                        Name = "operation",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Lists all operations for a project.</summary>
        /// <param name="project">The project ID for this request.</param>
        public virtual ListRequest List(string project)
        {
            return new ListRequest(service, project);
        }

        /// <summary>Lists all operations for a project.</summary>
        public class ListRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.OperationsListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string project)
                : base(service)
            {
                Project = project;
                InitParameters();
            }


            /// <summary>The project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Sets a filter expression for filtering listed resources, in the form filter={expression}. Your
            /// {expression} must be in the format: field_name comparison_string literal_string.
            ///
            /// The field_name is the name of the field you want to compare. Only atomic field types are supported
            /// (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The
            /// literal_string is the string value to filter to. The literal value must be valid for the type of field
            /// you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a
            /// regular expression using RE2 syntax. The literal value must match the entire field.
            ///
            /// For example, to filter for instances that do not have a name of example-instance, you would use
            /// filter=name ne example-instance.
            ///
            /// You can filter on nested fields. For example, you could filter on instances that have set the
            /// scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to
            /// organize and search for results based on label values.
            ///
            /// To filter on multiple expressions, provide each separate expression within parentheses. For example,
            /// (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND
            /// expressions, meaning that resources must match all expressions to pass the filters.</summary>
            [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filter { get; set; }

            /// <summary>The maximum number of results per page that should be returned. If the number of available
            /// results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the
            /// next page of results in subsequent list requests. Acceptable values are 0 to 500, inclusive. (Default:
            /// 500)</summary>
            /// [default: 500]
            /// [minimum: 0]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Sorts list results by a certain order. By default, results are returned in alphanumerical order
            /// based on the resource name.
            ///
            /// You can also sort results in descending order based on the creation timestamp using
            /// orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse
            /// chronological order (newest result first). Use this to sort resources like operations so that the newest
            /// operation is returned first.
            ///
            /// Currently, only sorting by name or creationTimestamp desc is supported.</summary>
            [Google.Apis.Util.RequestParameterAttribute("orderBy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string OrderBy { get; set; }

            /// <summary>Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list
            /// request to get the next page of results.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/operations"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "filter", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filter",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "500",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "orderBy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "orderBy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "resources" collection of methods.</summary>
    public class ResourcesResource
    {
        private const string Resource = "resources";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ResourcesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Gets information about a single resource.</summary>
        /// <param name="project">The project ID for this request.</param>
        /// <param name="deployment">The name of the
        /// deployment for this request.</param>
        /// <param name="resource">The name of the resource for this
        /// request.</param>
        public virtual GetRequest Get(string project, string deployment, string resource)
        {
            return new GetRequest(service, project, deployment, resource);
        }

        /// <summary>Gets information about a single resource.</summary>
        public class GetRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.Resource>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string project, string deployment, string resource)
                : base(service)
            {
                Project = project;
                Deployment = deployment;
                Resource = resource;
                InitParameters();
            }


            /// <summary>The project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the deployment for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("deployment", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Deployment { get; private set; }

            /// <summary>The name of the resource for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Resource { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/deployments/{deployment}/resources/{resource}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "deployment", new Google.Apis.Discovery.Parameter
                    {
                        Name = "deployment",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "resource", new Google.Apis.Discovery.Parameter
                    {
                        Name = "resource",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Lists all resources in a given deployment.</summary>
        /// <param name="project">The project ID for this request.</param>
        /// <param name="deployment">The name of the
        /// deployment for this request.</param>
        public virtual ListRequest List(string project, string deployment)
        {
            return new ListRequest(service, project, deployment);
        }

        /// <summary>Lists all resources in a given deployment.</summary>
        public class ListRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.ResourcesListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string project, string deployment)
                : base(service)
            {
                Project = project;
                Deployment = deployment;
                InitParameters();
            }


            /// <summary>The project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>The name of the deployment for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("deployment", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Deployment { get; private set; }

            /// <summary>Sets a filter expression for filtering listed resources, in the form filter={expression}. Your
            /// {expression} must be in the format: field_name comparison_string literal_string.
            ///
            /// The field_name is the name of the field you want to compare. Only atomic field types are supported
            /// (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The
            /// literal_string is the string value to filter to. The literal value must be valid for the type of field
            /// you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a
            /// regular expression using RE2 syntax. The literal value must match the entire field.
            ///
            /// For example, to filter for instances that do not have a name of example-instance, you would use
            /// filter=name ne example-instance.
            ///
            /// You can filter on nested fields. For example, you could filter on instances that have set the
            /// scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to
            /// organize and search for results based on label values.
            ///
            /// To filter on multiple expressions, provide each separate expression within parentheses. For example,
            /// (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND
            /// expressions, meaning that resources must match all expressions to pass the filters.</summary>
            [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filter { get; set; }

            /// <summary>The maximum number of results per page that should be returned. If the number of available
            /// results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the
            /// next page of results in subsequent list requests. Acceptable values are 0 to 500, inclusive. (Default:
            /// 500)</summary>
            /// [default: 500]
            /// [minimum: 0]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Sorts list results by a certain order. By default, results are returned in alphanumerical order
            /// based on the resource name.
            ///
            /// You can also sort results in descending order based on the creation timestamp using
            /// orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse
            /// chronological order (newest result first). Use this to sort resources like operations so that the newest
            /// operation is returned first.
            ///
            /// Currently, only sorting by name or creationTimestamp desc is supported.</summary>
            [Google.Apis.Util.RequestParameterAttribute("orderBy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string OrderBy { get; set; }

            /// <summary>Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list
            /// request to get the next page of results.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/deployments/{deployment}/resources"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "deployment", new Google.Apis.Discovery.Parameter
                    {
                        Name = "deployment",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "filter", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filter",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "500",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "orderBy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "orderBy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "types" collection of methods.</summary>
    public class TypesResource
    {
        private const string Resource = "types";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public TypesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Lists all resource types for Deployment Manager.</summary>
        /// <param name="project">The project ID for this request.</param>
        public virtual ListRequest List(string project)
        {
            return new ListRequest(service, project);
        }

        /// <summary>Lists all resource types for Deployment Manager.</summary>
        public class ListRequest : DeploymentManagerBaseServiceRequest<Google.Apis.DeploymentManager.v2.Data.TypesListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string project)
                : base(service)
            {
                Project = project;
                InitParameters();
            }


            /// <summary>The project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Sets a filter expression for filtering listed resources, in the form filter={expression}. Your
            /// {expression} must be in the format: field_name comparison_string literal_string.
            ///
            /// The field_name is the name of the field you want to compare. Only atomic field types are supported
            /// (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The
            /// literal_string is the string value to filter to. The literal value must be valid for the type of field
            /// you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a
            /// regular expression using RE2 syntax. The literal value must match the entire field.
            ///
            /// For example, to filter for instances that do not have a name of example-instance, you would use
            /// filter=name ne example-instance.
            ///
            /// You can filter on nested fields. For example, you could filter on instances that have set the
            /// scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to
            /// organize and search for results based on label values.
            ///
            /// To filter on multiple expressions, provide each separate expression within parentheses. For example,
            /// (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND
            /// expressions, meaning that resources must match all expressions to pass the filters.</summary>
            [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filter { get; set; }

            /// <summary>The maximum number of results per page that should be returned. If the number of available
            /// results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the
            /// next page of results in subsequent list requests. Acceptable values are 0 to 500, inclusive. (Default:
            /// 500)</summary>
            /// [default: 500]
            /// [minimum: 0]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Sorts list results by a certain order. By default, results are returned in alphanumerical order
            /// based on the resource name.
            ///
            /// You can also sort results in descending order based on the creation timestamp using
            /// orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse
            /// chronological order (newest result first). Use this to sort resources like operations so that the newest
            /// operation is returned first.
            ///
            /// Currently, only sorting by name or creationTimestamp desc is supported.</summary>
            [Google.Apis.Util.RequestParameterAttribute("orderBy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string OrderBy { get; set; }

            /// <summary>Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list
            /// request to get the next page of results.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/types"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "filter", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filter",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "500",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "orderBy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "orderBy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }
}

namespace Google.Apis.DeploymentManager.v2.Data
{    

    /// <summary>Specifies the audit configuration for a service. The configuration determines which permission types
    /// are logged, and what identities, if any, are exempted from logging. An AuditConifg must have one or more
    /// AuditLogConfigs.
    ///
    /// If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is
    /// used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each
    /// AuditConfig are exempted. Example Policy with multiple AuditConfigs: { "audit_configs": [ { "service":
    /// "allServices" "audit_log_configs": [ { "log_type": "DATA_READ", "exempted_members": [ "user:foo@gmail.com" ] },
    /// { "log_type": "DATA_WRITE", }, { "log_type": "ADMIN_READ", } ] }, { "service": "fooservice@googleapis.com"
    /// "audit_log_configs": [ { "log_type": "DATA_READ", }, { "log_type": "DATA_WRITE", "exempted_members": [
    /// "user:bar@gmail.com" ] } ] } ] } For fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ
    /// logging. It also exempts foo@gmail.com from DATA_READ logging, and bar@gmail.com from DATA_WRITE
    /// logging.</summary>
    public class AuditConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The configuration for logging of each type of permission.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("auditLogConfigs")]
        public virtual System.Collections.Generic.IList<AuditLogConfig> AuditLogConfigs { get; set; } 

        [Newtonsoft.Json.JsonPropertyAttribute("exemptedMembers")]
        public virtual System.Collections.Generic.IList<string> ExemptedMembers { get; set; } 

        /// <summary>Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`,
        /// `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("service")]
        public virtual string Service { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Provides the configuration for logging a type of permissions. Example:
    ///
    /// { "audit_log_configs": [ { "log_type": "DATA_READ", "exempted_members": [ "user:foo@gmail.com" ] }, {
    /// "log_type": "DATA_WRITE", } ] }
    ///
    /// This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting foo@gmail.com from DATA_READ
    /// logging.</summary>
    public class AuditLogConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Specifies the identities that do not cause logging for this type of permission. Follows the same
        /// format of [Binding.members][].</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("exemptedMembers")]
        public virtual System.Collections.Generic.IList<string> ExemptedMembers { get; set; } 

        /// <summary>The log type that this config enables.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("logType")]
        public virtual string LogType { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Associates `members` with a `role`.</summary>
    public class Binding : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Specifies the identities requesting access for a Cloud Platform resource. `members` can have the
        /// following values:
        ///
        /// * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google
        /// account.
        ///
        /// * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google
        /// account or a service account.
        ///
        /// * `user:{emailid}`: An email address that represents a specific Google account. For example,
        /// `alice@gmail.com` or `joe@example.com`.
        ///
        /// * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-
        /// app@appspot.gserviceaccount.com`.
        ///
        /// * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`.
        ///
        /// * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example,
        /// `google.com` or `example.com`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("members")]
        public virtual System.Collections.Generic.IList<string> Members { get; set; } 

        /// <summary>Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or
        /// `roles/owner`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("role")]
        public virtual string Role { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A condition to be met.</summary>
    public class Condition : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Trusted attributes supplied by the IAM system.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("iam")]
        public virtual string Iam { get; set; } 

        /// <summary>An operator to apply the subject with.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("op")]
        public virtual string Op { get; set; } 

        /// <summary>Trusted attributes discharged by the service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("svc")]
        public virtual string Svc { get; set; } 

        /// <summary>Trusted attributes supplied by any service that owns resources and uses the IAM system for access
        /// control.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sys")]
        public virtual string Sys { get; set; } 

        /// <summary>DEPRECATED. Use 'values' instead.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The objects of the condition. This is mutually exclusive with 'value'.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("values")]
        public virtual System.Collections.Generic.IList<string> Values { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class ConfigFile : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The contents of the file.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("content")]
        public virtual string Content { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class Deployment : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>An optional user-provided description of the deployment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>Provides a fingerprint to use in requests to modify a deployment, such as update(), stop(), and
        /// cancelPreview() requests. A fingerprint is a randomly generated value that must be provided with update(),
        /// stop(), and cancelPreview() requests to perform optimistic locking. This ensures optimistic concurrency so
        /// that only one request happens at a time.
        ///
        /// The fingerprint is initially generated by Deployment Manager and changes after every request to modify data.
        /// To get the latest fingerprint value, perform a get() request to a deployment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fingerprint")]
        public virtual string Fingerprint { get; set; } 

        /// <summary>[Output Only] Unique identifier for the resource; defined by the server.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual System.Nullable<ulong> Id { get; set; } 

        /// <summary>[Output Only] Timestamp when the deployment was created, in RFC3339 text format .</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("insertTime")]
        public virtual string InsertTime { get; set; } 

        /// <summary>Map of labels; provided by the client when the resource is created or updated. Specifically: Label
        /// keys must be between 1 and 63 characters long and must conform to the following regular expression:
        /// [a-z]([-a-z0-9]*[a-z0-9])? Label values must be between 0 and 63 characters long and must conform to the
        /// regular expression ([a-z]([-a-z0-9]*[a-z0-9])?)?</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labels")]
        public virtual System.Collections.Generic.IList<DeploymentLabelEntry> Labels { get; set; } 

        /// <summary>[Output Only] URL of the manifest representing the last manifest that was successfully
        /// deployed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("manifest")]
        public virtual string Manifest { get; set; } 

        /// <summary>Name of the resource; provided by the client when the resource is created. The name must be 1-63
        /// characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the
        /// regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter,
        /// and all following characters must be a dash, lowercase letter, or digit, except the last character, which
        /// cannot be a dash.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>[Output Only] The Operation that most recently ran, or is currently running, on this
        /// deployment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operation")]
        public virtual Operation Operation { get; set; } 

        /// <summary>[Output Only] Self link for the deployment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>[Input Only] The parameters that define your deployment, including the deployment configuration and
        /// relevant templates.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("target")]
        public virtual TargetConfiguration Target { get; set; } 

        /// <summary>[Output Only] If Deployment Manager is currently updating or previewing an update to this
        /// deployment, the updated configuration appears here.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("update")]
        public virtual DeploymentUpdate Update { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class DeploymentLabelEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("key")]
        public virtual string Key { get; set; } 

        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class DeploymentUpdate : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] An optional user-provided description of the deployment after the current update has
        /// been applied.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>[Output Only] Map of labels; provided by the client when the resource is created or updated.
        /// Specifically: Label keys must be between 1 and 63 characters long and must conform to the following regular
        /// expression: [a-z]([-a-z0-9]*[a-z0-9])? Label values must be between 0 and 63 characters long and must
        /// conform to the regular expression ([a-z]([-a-z0-9]*[a-z0-9])?)?</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labels")]
        public virtual System.Collections.Generic.IList<DeploymentUpdateLabelEntry> Labels { get; set; } 

        /// <summary>[Output Only] URL of the manifest representing the update configuration of this
        /// deployment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("manifest")]
        public virtual string Manifest { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class DeploymentUpdateLabelEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("key")]
        public virtual string Key { get; set; } 

        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class DeploymentsCancelPreviewRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Specifies a fingerprint for cancelPreview() requests. A fingerprint is a randomly generated value
        /// that must be provided in cancelPreview() requests to perform optimistic locking. This ensures optimistic
        /// concurrency so that the deployment does not have conflicting requests (e.g. if someone attempts to make a
        /// new update request while another user attempts to cancel a preview, this would prevent one of the requests).
        ///
        /// The fingerprint is initially generated by Deployment Manager and changes after every request to modify a
        /// deployment. To get the latest fingerprint value, perform a get() request on the deployment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fingerprint")]
        public virtual string Fingerprint { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A response containing a partial list of deployments and a page token used to build the next request if
    /// the request has been truncated.</summary>
    public class DeploymentsListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] The deployments contained in this response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deployments")]
        public virtual System.Collections.Generic.IList<Deployment> Deployments { get; set; } 

        /// <summary>[Output Only] A token used to continue a truncated list request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class DeploymentsStopRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Specifies a fingerprint for stop() requests. A fingerprint is a randomly generated value that must
        /// be provided in stop() requests to perform optimistic locking. This ensures optimistic concurrency so that
        /// the deployment does not have conflicting requests (e.g. if someone attempts to make a new update request
        /// while another user attempts to stop an ongoing update request, this would prevent a collision).
        ///
        /// The fingerprint is initially generated by Deployment Manager and changes after every request to modify a
        /// deployment. To get the latest fingerprint value, perform a get() request on the deployment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fingerprint")]
        public virtual string Fingerprint { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class ImportFile : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The contents of the file.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("content")]
        public virtual string Content { get; set; } 

        /// <summary>The name of the file.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Specifies what kind of log the caller must write</summary>
    public class LogConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Counter options.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("counter")]
        public virtual LogConfigCounterOptions Counter { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Options for counters</summary>
    public class LogConfigCounterOptions : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The field value to attribute.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("field")]
        public virtual string Field { get; set; } 

        /// <summary>The metric to update.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metric")]
        public virtual string Metric { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class Manifest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] The YAML configuration for this manifest.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("config")]
        public virtual ConfigFile Config { get; set; } 

        /// <summary>[Output Only] The fully-expanded configuration file, including any templates and
        /// references.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("expandedConfig")]
        public virtual string ExpandedConfig { get; set; } 

        /// <summary>[Output Only] Unique identifier for the resource; defined by the server.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual System.Nullable<ulong> Id { get; set; } 

        /// <summary>[Output Only] The imported files for this manifest.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("imports")]
        public virtual System.Collections.Generic.IList<ImportFile> Imports { get; set; } 

        /// <summary>[Output Only] Timestamp when the manifest was created, in RFC3339 text format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("insertTime")]
        public virtual string InsertTime { get; set; } 

        /// <summary>[Output Only] The YAML layout for this manifest.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("layout")]
        public virtual string Layout { get; set; } 

        /// <summary>[Output Only] The name of the manifest.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>[Output Only] Self link for the manifest.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A response containing a partial list of manifests and a page token used to build the next request if
    /// the request has been truncated.</summary>
    public class ManifestsListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] Manifests contained in this list response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("manifests")]
        public virtual System.Collections.Generic.IList<Manifest> Manifests { get; set; } 

        /// <summary>[Output Only] A token used to continue a truncated list request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An Operation resource, used to manage asynchronous API requests.</summary>
    public class Operation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] Reserved for future use.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clientOperationId")]
        public virtual string ClientOperationId { get; set; } 

        /// <summary>[Deprecated] This field is deprecated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creationTimestamp")]
        public virtual string CreationTimestamp { get; set; } 

        /// <summary>[Output Only] A textual description of the operation, which is set when the operation is
        /// created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>[Output Only] The time that this operation was completed. This value is in RFC3339 text
        /// format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("endTime")]
        public virtual string EndTime { get; set; } 

        /// <summary>[Output Only] If errors are generated during processing of the operation, this field will be
        /// populated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("error")]
        public virtual Operation.ErrorData Error { get; set; } 

        /// <summary>[Output Only] If the operation fails, this field contains the HTTP error message that was returned,
        /// such as NOT FOUND.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("httpErrorMessage")]
        public virtual string HttpErrorMessage { get; set; } 

        /// <summary>[Output Only] If the operation fails, this field contains the HTTP error status code that was
        /// returned. For example, a 404 means the resource was not found.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("httpErrorStatusCode")]
        public virtual System.Nullable<int> HttpErrorStatusCode { get; set; } 

        /// <summary>[Output Only] The unique identifier for the resource. This identifier is defined by the
        /// server.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual System.Nullable<ulong> Id { get; set; } 

        /// <summary>[Output Only] The time that this operation was requested. This value is in RFC3339 text
        /// format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("insertTime")]
        public virtual string InsertTime { get; set; } 

        /// <summary>[Output Only] Type of the resource. Always compute#operation for Operation resources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>[Output Only] Name of the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>[Output Only] The type of operation, such as insert, update, or delete, and so on.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operationType")]
        public virtual string OperationType { get; set; } 

        /// <summary>[Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement
        /// that this be linear or support any granularity of operations. This should not be used to guess when the
        /// operation will be complete. This number should monotonically increase as the operation progresses.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("progress")]
        public virtual System.Nullable<int> Progress { get; set; } 

        /// <summary>[Output Only] The URL of the region where the operation resides. Only available when performing
        /// regional operations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("region")]
        public virtual string Region { get; set; } 

        /// <summary>[Output Only] Server-defined URL for the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>[Output Only] The time that this operation was started by the server. This value is in RFC3339 text
        /// format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startTime")]
        public virtual string StartTime { get; set; } 

        /// <summary>[Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or
        /// DONE.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; } 

        /// <summary>[Output Only] An optional textual description of the current status of the operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("statusMessage")]
        public virtual string StatusMessage { get; set; } 

        /// <summary>[Output Only] The unique target ID, which identifies a specific incarnation of the target
        /// resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetId")]
        public virtual System.Nullable<ulong> TargetId { get; set; } 

        /// <summary>[Output Only] The URL of the resource that the operation modifies. For operations related to
        /// creating a snapshot, this points to the persistent disk that the snapshot was created from.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetLink")]
        public virtual string TargetLink { get; set; } 

        /// <summary>[Output Only] User who requested the operation, for example: user@example.com.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("user")]
        public virtual string User { get; set; } 

        /// <summary>[Output Only] If warning messages are generated during processing of the operation, this field will
        /// be populated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("warnings")]
        public virtual System.Collections.Generic.IList<Operation.WarningsData> Warnings { get; set; } 

        /// <summary>[Output Only] The URL of the zone where the operation resides. Only available when performing per-
        /// zone operations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("zone")]
        public virtual string Zone { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
        

        /// <summary>[Output Only] If errors are generated during processing of the operation, this field will be
        /// populated.</summary>
        public class ErrorData
        {
            /// <summary>[Output Only] The array of errors encountered while processing this operation.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("errors")]
            public virtual System.Collections.Generic.IList<ErrorData.ErrorsData> Errors { get; set; } 

            

            public class ErrorsData
            {
                /// <summary>[Output Only] The error type identifier for this error.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("code")]
                public virtual string Code { get; set; } 

                /// <summary>[Output Only] Indicates the field in the request that caused the error. This property is
                /// optional.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("location")]
                public virtual string Location { get; set; } 

                /// <summary>[Output Only] An optional, human-readable error message.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("message")]
                public virtual string Message { get; set; } 

            }
        }    

        public class WarningsData
        {
            /// <summary>[Output Only] A warning code, if applicable. For example, Compute Engine returns
            /// NO_RESULTS_ON_PAGE if there are no results in the response.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("code")]
            public virtual string Code { get; set; } 

            /// <summary>[Output Only] Metadata about this warning in key: value format. For example: "data": [ { "key":
            /// "scope", "value": "zones/us-east1-d" }</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("data")]
            public virtual System.Collections.Generic.IList<WarningsData.DataData> Data { get; set; } 

            /// <summary>[Output Only] A human-readable description of the warning code.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("message")]
            public virtual string Message { get; set; } 

            

            public class DataData
            {
                /// <summary>[Output Only] A key that provides more detail on the warning being returned. For example,
                /// for warnings where there are no results in a list request for a particular zone, this key might be
                /// scope and the key value might be the zone name. Other examples might be a key indicating a
                /// deprecated resource and a suggested replacement, or a warning about invalid network settings (for
                /// example, if an instance attempts to perform IP forwarding but is not enabled for IP
                /// forwarding).</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("key")]
                public virtual string Key { get; set; } 

                /// <summary>[Output Only] A warning data value corresponding to the key.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("value")]
                public virtual string Value { get; set; } 

            }
        }
    }    

    /// <summary>A response containing a partial list of operations and a page token used to build the next request if
    /// the request has been truncated.</summary>
    public class OperationsListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] A token used to continue a truncated list request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>[Output Only] Operations contained in this list response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operations")]
        public virtual System.Collections.Generic.IList<Operation> Operations { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies
    /// for Cloud Platform resources.
    ///
    /// A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the
    /// members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of
    /// permissions defined by IAM.
    ///
    /// **Example**
    ///
    /// { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com",
    /// "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer",
    /// "members": ["user:sean@example.com"] } ] }
    ///
    /// For a description of IAM and its features, see the [IAM developer's
    /// guide](https://cloud.google.com/iam).</summary>
    public class Policy : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Specifies cloud audit logging configuration for this policy.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("auditConfigs")]
        public virtual System.Collections.Generic.IList<AuditConfig> AuditConfigs { get; set; } 

        /// <summary>Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same
        /// `role`. `bindings` with no members will result in an error.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bindings")]
        public virtual System.Collections.Generic.IList<Binding> Bindings { get; set; } 

        /// <summary>`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of
        /// a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the
        /// read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned
        /// in the response to `getIamPolicy`, and systems are expected to put that etag in the request to
        /// `setIamPolicy` to ensure that their change will be applied to the same version of the policy.
        ///
        /// If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten
        /// blindly.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        [Newtonsoft.Json.JsonPropertyAttribute("iamOwned")]
        public virtual System.Nullable<bool> IamOwned { get; set; } 

        /// <summary>If more than one rule is specified, the rules are applied in the following manner: - All matching
        /// LOG rules are always applied. - If any DENY/DENY_WITH_LOG rule matches, permission is denied. Logging will
        /// be applied if one or more matching rule requires logging. - Otherwise, if any ALLOW/ALLOW_WITH_LOG rule
        /// matches, permission is granted. Logging will be applied if one or more matching rule requires logging. -
        /// Otherwise, if no rule applies, permission is denied.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rules")]
        public virtual System.Collections.Generic.IList<Rule> Rules { get; set; } 

        /// <summary>Version of the `Policy`. The default version is 0.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual System.Nullable<int> Version { get; set; } 

    }    

    public class Resource : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The Access Control Policy set on this resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accessControl")]
        public virtual ResourceAccessControl AccessControl { get; set; } 

        /// <summary>[Output Only] The evaluated properties of the resource with references expanded. Returned as
        /// serialized YAML.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("finalProperties")]
        public virtual string FinalProperties { get; set; } 

        /// <summary>[Output Only] Unique identifier for the resource; defined by the server.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual System.Nullable<ulong> Id { get; set; } 

        /// <summary>[Output Only] Timestamp when the resource was created or acquired, in RFC3339 text format
        /// .</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("insertTime")]
        public virtual string InsertTime { get; set; } 

        /// <summary>[Output Only] URL of the manifest representing the current configuration of this
        /// resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("manifest")]
        public virtual string Manifest { get; set; } 

        /// <summary>[Output Only] The name of the resource as it appears in the YAML config.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>[Output Only] The current properties of the resource before any references have been filled in.
        /// Returned as serialized YAML.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("properties")]
        public virtual string Properties { get; set; } 

        /// <summary>[Output Only] The type of the resource, for example compute.v1.instance, or
        /// cloudfunctions.v1beta1.function.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>[Output Only] If Deployment Manager is currently updating or previewing an update to this resource,
        /// the updated configuration appears here.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("update")]
        public virtual ResourceUpdate Update { get; set; } 

        /// <summary>[Output Only] Timestamp when the resource was updated, in RFC3339 text format .</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateTime")]
        public virtual string UpdateTime { get; set; } 

        /// <summary>[Output Only] The URL of the actual resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("url")]
        public virtual string Url { get; set; } 

        /// <summary>[Output Only] If warning messages are generated during processing of this resource, this field will
        /// be populated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("warnings")]
        public virtual System.Collections.Generic.IList<Resource.WarningsData> Warnings { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
        

        public class WarningsData
        {
            /// <summary>[Output Only] A warning code, if applicable. For example, Compute Engine returns
            /// NO_RESULTS_ON_PAGE if there are no results in the response.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("code")]
            public virtual string Code { get; set; } 

            /// <summary>[Output Only] Metadata about this warning in key: value format. For example: "data": [ { "key":
            /// "scope", "value": "zones/us-east1-d" }</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("data")]
            public virtual System.Collections.Generic.IList<WarningsData.DataData> Data { get; set; } 

            /// <summary>[Output Only] A human-readable description of the warning code.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("message")]
            public virtual string Message { get; set; } 

            

            public class DataData
            {
                /// <summary>[Output Only] A key that provides more detail on the warning being returned. For example,
                /// for warnings where there are no results in a list request for a particular zone, this key might be
                /// scope and the key value might be the zone name. Other examples might be a key indicating a
                /// deprecated resource and a suggested replacement, or a warning about invalid network settings (for
                /// example, if an instance attempts to perform IP forwarding but is not enabled for IP
                /// forwarding).</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("key")]
                public virtual string Key { get; set; } 

                /// <summary>[Output Only] A warning data value corresponding to the key.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("value")]
                public virtual string Value { get; set; } 

            }
        }
    }    

    /// <summary>The access controls set on the resource.</summary>
    public class ResourceAccessControl : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The GCP IAM Policy to set on the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gcpIamPolicy")]
        public virtual string GcpIamPolicy { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class ResourceUpdate : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The Access Control Policy to set on this resource after updating the resource itself.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accessControl")]
        public virtual ResourceAccessControl AccessControl { get; set; } 

        /// <summary>[Output Only] If errors are generated during update of the resource, this field will be
        /// populated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("error")]
        public virtual ResourceUpdate.ErrorData Error { get; set; } 

        /// <summary>[Output Only] The expanded properties of the resource with reference values expanded. Returned as
        /// serialized YAML.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("finalProperties")]
        public virtual string FinalProperties { get; set; } 

        /// <summary>[Output Only] The intent of the resource: PREVIEW, UPDATE, or CANCEL.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("intent")]
        public virtual string Intent { get; set; } 

        /// <summary>[Output Only] URL of the manifest representing the update configuration of this resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("manifest")]
        public virtual string Manifest { get; set; } 

        /// <summary>[Output Only] The set of updated properties for this resource, before references are expanded.
        /// Returned as serialized YAML.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("properties")]
        public virtual string Properties { get; set; } 

        /// <summary>[Output Only] The state of the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("state")]
        public virtual string State { get; set; } 

        /// <summary>[Output Only] If warning messages are generated during processing of this resource, this field will
        /// be populated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("warnings")]
        public virtual System.Collections.Generic.IList<ResourceUpdate.WarningsData> Warnings { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
        

        /// <summary>[Output Only] If errors are generated during update of the resource, this field will be
        /// populated.</summary>
        public class ErrorData
        {
            /// <summary>[Output Only] The array of errors encountered while processing this operation.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("errors")]
            public virtual System.Collections.Generic.IList<ErrorData.ErrorsData> Errors { get; set; } 

            

            public class ErrorsData
            {
                /// <summary>[Output Only] The error type identifier for this error.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("code")]
                public virtual string Code { get; set; } 

                /// <summary>[Output Only] Indicates the field in the request that caused the error. This property is
                /// optional.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("location")]
                public virtual string Location { get; set; } 

                /// <summary>[Output Only] An optional, human-readable error message.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("message")]
                public virtual string Message { get; set; } 

            }
        }    

        public class WarningsData
        {
            /// <summary>[Output Only] A warning code, if applicable. For example, Compute Engine returns
            /// NO_RESULTS_ON_PAGE if there are no results in the response.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("code")]
            public virtual string Code { get; set; } 

            /// <summary>[Output Only] Metadata about this warning in key: value format. For example: "data": [ { "key":
            /// "scope", "value": "zones/us-east1-d" }</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("data")]
            public virtual System.Collections.Generic.IList<WarningsData.DataData> Data { get; set; } 

            /// <summary>[Output Only] A human-readable description of the warning code.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("message")]
            public virtual string Message { get; set; } 

            

            public class DataData
            {
                /// <summary>[Output Only] A key that provides more detail on the warning being returned. For example,
                /// for warnings where there are no results in a list request for a particular zone, this key might be
                /// scope and the key value might be the zone name. Other examples might be a key indicating a
                /// deprecated resource and a suggested replacement, or a warning about invalid network settings (for
                /// example, if an instance attempts to perform IP forwarding but is not enabled for IP
                /// forwarding).</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("key")]
                public virtual string Key { get; set; } 

                /// <summary>[Output Only] A warning data value corresponding to the key.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("value")]
                public virtual string Value { get; set; } 

            }
        }
    }    

    /// <summary>A response containing a partial list of resources and a page token used to build the next request if
    /// the request has been truncated.</summary>
    public class ResourcesListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A token used to continue a truncated list request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>Resources contained in this list response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("resources")]
        public virtual System.Collections.Generic.IList<Resource> Resources { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A rule to be applied in a Policy.</summary>
    public class Rule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("action")]
        public virtual string Action { get; set; } 

        /// <summary>Additional restrictions that must be met</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("conditions")]
        public virtual System.Collections.Generic.IList<Condition> Conditions { get; set; } 

        /// <summary>Human-readable description of the rule.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>If one or more 'in' clauses are specified, the rule matches if the PRINCIPAL/AUTHORITY_SELECTOR is
        /// in at least one of these entries.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ins")]
        public virtual System.Collections.Generic.IList<string> Ins { get; set; } 

        /// <summary>The config returned to callers of tech.iam.IAM.CheckPolicy for any entries that match the LOG
        /// action.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("logConfigs")]
        public virtual System.Collections.Generic.IList<LogConfig> LogConfigs { get; set; } 

        /// <summary>If one or more 'not_in' clauses are specified, the rule matches if the PRINCIPAL/AUTHORITY_SELECTOR
        /// is in none of the entries.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("notIns")]
        public virtual System.Collections.Generic.IList<string> NotIns { get; set; } 

        /// <summary>A permission is a string of form '..' (e.g., 'storage.buckets.list'). A value of '*' matches all
        /// permissions, and a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("permissions")]
        public virtual System.Collections.Generic.IList<string> Permissions { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class TargetConfiguration : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The configuration to use for this deployment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("config")]
        public virtual ConfigFile Config { get; set; } 

        /// <summary>Specifies any files to import for this configuration. This can be used to import templates or other
        /// files. For example, you might import a text file in order to use the file in a template.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("imports")]
        public virtual System.Collections.Generic.IList<ImportFile> Imports { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class TestPermissionsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The set of permissions to check for the 'resource'. Permissions with wildcards (such as '*' or
        /// 'storage.*') are not allowed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("permissions")]
        public virtual System.Collections.Generic.IList<string> Permissions { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class TestPermissionsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A subset of `TestPermissionsRequest.permissions` that the caller is allowed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("permissions")]
        public virtual System.Collections.Generic.IList<string> Permissions { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A resource type supported by Deployment Manager.</summary>
    public class Type : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] Unique identifier for the resource; defined by the server.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual System.Nullable<ulong> Id { get; set; } 

        /// <summary>[Output Only] Timestamp when the type was created, in RFC3339 text format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("insertTime")]
        public virtual string InsertTime { get; set; } 

        /// <summary>Name of the type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>[Output Only] The Operation that most recently ran, or is currently running, on this
        /// type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operation")]
        public virtual Operation Operation { get; set; } 

        /// <summary>[Output Only] Self link for the type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A response that returns all Types supported by Deployment Manager</summary>
    public class TypesListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A token used to continue a truncated list request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>[Output Only] A list of resource types supported by Deployment Manager.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("types")]
        public virtual System.Collections.Generic.IList<Type> Types { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
